﻿Imports PTIC_GestionExcel
Imports PTIC_GestionBDD
Imports PTIC_Util
Imports PTIC_Composants_WF
Imports Microsoft.Office.Interop
Imports Actuariat
Imports Actuariat.comptes
Imports OMANE.moteurTauxGaranti2

Public Class frmResultatsModele2
    Implements PTIC_Util.IObserver

#Region "Variables de classe"
    'Univers de travail, récupéré depuis la fenêtre d'ossature de l'application et destiné à être paramétré
    Protected _universBDD As UniversOMANE
    Protected _controleurOMANE As Controleur

    Protected _bln_actualiseModele As Boolean = True
    Protected _bln_actualiseTextBox As Boolean = True
    Protected _TxtPrecPosCurseur As Integer

    Protected _ongletTableTravail As TabPage
    Protected _ongletResultatsDetailles As TabPage
    Protected _ongletCompteResultat As TabPage
    Protected _ongletBilan As TabPage
    Protected _ongletIndicateurs As TabPage
    Protected _ongletGraphiques As TabPage
    Protected _vueCompteResultat As vueCompteDeResultat_V2
    Protected _vueBilan As vueBilan_V2
    Protected _vueIndicateurs As vueIndicateurs_V2

#End Region

#Region "Création d'une instance"
    Public Sub New(ByVal univers As UniversOMANE, _
                   ByVal controleur As Controleur)

        InitializeComponent()

        _universBDD = univers
        _controleurOMANE = controleur
        _ongletTableTravail = Me.tbp_TableTravail
        _ongletResultatsDetailles = Me.tbp_ResCalculsDetailles
        _ongletCompteResultat = Me.tbp_CompteResultat
        _ongletBilan = Me.tbp_Bilan
        _ongletIndicateurs = Me.tbp_Indicateurs
        _ongletGraphiques = Me.tbp_Graphiques
        _vueCompteResultat = _ongletCompteResultat.Controls.Find("PtiC_CompteDeResultat", True)(0)
        _vueBilan = _ongletBilan.Controls.Find("PtiC_Bilan", True)(0)
        _vueIndicateurs = _ongletIndicateurs.Controls.Find("PtiC_Indicateurs", True)(0)

    End Sub
    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2

        'Observation du traitement préparatoire au moteur de calcul 2 par ce dernier
        AddHandler _universBDD.listeTraitements.getTraitEntreeModeleTxGar.etatAchange, AddressOf moteur2.traitEntree_EtatAChange

        _vueCompteResultat.onLoad(moteur2)
        _vueBilan.onLoad(moteur2)
        _vueIndicateurs.onLoad(moteur2)
        '
        'Les vues du compte de résultat observent les comptes du moteur 2 pour l'affichage des hypothèses de calcul
        'de ces comptes (mais pas des résultats qui sont stockés dans l'objet scenarioCentral.Resultats
        '
        moteur2.Comptes.ajouteObserver(_vueCompteResultat)
        moteur2.Comptes.ajouteObserver(_vueBilan)
        moteur2.Comptes.ajouteObserver(_vueIndicateurs)
        '
        'La forme frmResultatsModele2 observe également les comptes pour l'affichage des hypothèses de calcul
        'Observation des comptes pour l'affichage du paramètre nombre d'années de projection.
        'Observation du moteur pour :
        '   - la mise à jour de l'affichage lors d'une invalidation des calculs du moteur
        '   - la mise à jour de l'affichage lors d'une modification de la segmentation retenue
        '   - la mise à jour de l'affichage lors d'une modificaiton du nombre de générations projetées
        '
        moteur2.Comptes.ajouteObserver(Me)
        moteur2.ajouteObserver(Me)
        moteur2.scenarioCentral.ajouteObserver(Me)
        '
        'Pour l'affichage des indicateurs / Table de calcul détaillés / Table en entrée
        '
        AddHandler moteur2.scenarioCentral.resultats.compteIndicateur_hasChanged, AddressOf onResultatsScenCent_Indicateurs_HasChanged
        AddHandler moteur2.scenarioCentral.resultats.tableEntreeEnrichie_hasChanged, AddressOf onResultatsScenCent_TbleEntree_HasChanged
        AddHandler moteur2.scenarioCentral.resultats.tableProjectionGen1Detaillee_hasChanged, AddressOf onResultatsScenCent_CalculsDetailles_HasChanged

        cbxUnite.SelectedItem = "€"

        refreshAll()

        'Le graphique de jauge est masqué
        ZedGraphGauge.Visible = False
        PtiC_PanelGpeBoxSPscenCent.Visible = False
        ''Me.PtiC_TableLayoutPanelResScenCent.SetRowSpan(Me.PtiC_PanelGpeBoxResScenMut, 3)

        PtiC_CompteDeResultat.DefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)
        PtiC_Bilan.DefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)
        PtiC_indicateurs.DefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)

        'Populate the dataGridView
        dgv_tbleCalculsDetailles.ColumnHeadersDefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)
        dgv_tbleCalculsDetailles.RowHeadersDefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)
        dgv_tbleCalculsDetailles.DefaultCellStyle.Format = "#,##0"
        dgv_tbleCalculsDetailles.ColumnHeadersDefaultCellStyle.Format = ""
        dgv_tbleCalculsDetailles.RowHeadersDefaultCellStyle.Format = ""

        dgv_tbleTravail.ColumnHeadersDefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)
        dgv_tbleTravail.RowHeadersDefaultCellStyle.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold)
        dgv_tbleTravail.DefaultCellStyle.Format = "#,##0"
        dgv_tbleTravail.ColumnHeadersDefaultCellStyle.Format = ""
        dgv_tbleTravail.RowHeadersDefaultCellStyle.Format = ""

    End Sub
#End Region

#Region "Interception des évènements sur la feuille de calcul"

#Region "Onglet de résultat du scénario central"

#Region "Tx com"
    Private Sub txtParam_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _
        Handles txtTxCom.Validating

        'La valeur du paramètre stockée dans le modèle est égale à sa dernière valeur valide
        'Ici, on cherche à savoir s'il faut ou non mettre à jour le paramètre
        Dim txt_Param As PTIC_Composants_WF.PTIC_NumFormatedTextBox
        txt_Param = CType(sender, TextBox)
        Dim nomParametre As String = nomTx_CommiContA
        Dim result As resultatValidationContraintes = _
            _controleurOMANE.controleListeParametres.isValeurUniqueAfficheeValide(nomParametre, txt_Param.Text)

        If Not e.Cancel = True Then
            If Not result.isValide Then
                e.Cancel = True
                txt_Param.Select(0, txt_Param.Text.Length)
                ErrorProvider1.SetError(txt_Param, result.msg)
            End If
        End If
    End Sub
    Private Sub txtParam_Validated(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles txtTxCom.Validated

        Dim txt_Param As PTIC_Composants_WF.PTIC_NumFormatedTextBox
        txt_Param = CType(sender, PTIC_Composants_WF.PTIC_NumFormatedTextBox)
        Dim nomParametre As String = nomTx_CommiContA

        _controleurOMANE.controleListeParametres.setValeurUniqueFromValeurAffichee(nomParametre, txt_Param.value)
    End Sub
#End Region

#Region "Cap init / nb prêts init / nb gen proj / croiss cap ini / croiss pop assu"

    Private Sub rdbCapIni_perso_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rdbCapIni_perso.CheckedChanged
        If rdbCapIni_perso.Checked Then
            _controleurOMANE.controleTraitements.controleMoteurMethode2.setCalculPersoPourCapIni()
            refreshCapInitiaux()
            txtEncTotGen1.Enabled = True
        Else
            _controleurOMANE.controleTraitements.controleMoteurMethode2.setCalculBasePourCapIni()
            refreshCapInitiaux()
            txtEncTotGen1.Enabled = False
        End If
    End Sub
    Private Sub rdbNbPretsAss1_perso_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rdbNbPretsAss1_perso.CheckedChanged
        If rdbNbPretsAss1_perso.Checked Then
            _controleurOMANE.controleTraitements.controleMoteurMethode2.setCalculPersoPourNbAssu()
            refreshNbPretsAssuGen1()
            txtNbPretsAssuGen1.Enabled = True
        Else
            _controleurOMANE.controleTraitements.controleMoteurMethode2.setCalculBasePourNbAssu()
            refreshNbPretsAssuGen1()
            txtNbPretsAssuGen1.Enabled = False
        End If
    End Sub

    Private Sub txtNbPretsAssuGen1_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNbPretsAssuGen1.Validated
        _controleurOMANE.controleTraitements.controleMoteurMethode2.setNbPretsAssuGen1(txtNbPretsAssuGen1.Text)
    End Sub
    Private Sub txtNbPretsAssuGen1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtNbPretsAssuGen1.Validating
        If Not e.Cancel = True Then
            If Not CInt(txtNbPretsAssuGen1.Text) >= 1 Then
                e.Cancel = True
                txtNbPretsAssuGen1.Select(0, txtNbPretsAssuGen1.Text.Length)
                ErrorProvider1.SetError(txtNbPretsAssuGen1, "La première génération doit contenir au moins un prêt")
            End If
        End If
    End Sub

    Private Sub txtEncTotGen1_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtEncTotGen1.Validated
        _controleurOMANE.controleTraitements.controleMoteurMethode2.setEncTotGen1(txtEncTotGen1.Text)
    End Sub
    Private Sub txtEncTotGen1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtEncTotGen1.Validating
        If Not e.Cancel = True Then
            If Not CInt(txtEncTotGen1.Text) >= 1 Then
                e.Cancel = True
                txtEncTotGen1.Select(0, txtEncTotGen1.Text.Length)
                ErrorProvider1.SetError(txtEncTotGen1, "La somme des capitaux initiaux de la première génération doit être supérieure ou égale à 1")
            End If
        End If
    End Sub

    Private Sub txtNbGen_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNbGen.Validated
        _controleurOMANE.controleTraitements.controleMoteurMethode2.setNbGenProj(txtNbGen.Text)
    End Sub
    Private Sub txtNbGen_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtNbGen.Validating
        If Not e.Cancel = True Then
            If Not CInt(txtNbGen.Text) >= 1 Then
                e.Cancel = True
                txtNbGen.Select(0, txtNbGen.Text.Length)
                ErrorProvider1.SetError(txtNbGen, "Une génération au moins doit être projetée")
            End If
        End If
    End Sub

    Private Sub txtCroissPopNb_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtCroissPopNb.Validating
        If Not e.Cancel = True Then
            If Not CInt(txtCroissPopNb.Text) >= 0 Then
                e.Cancel = True
                txtCroissPopNb.Select(0, txtCroissPopNb.Text.Length)
                ErrorProvider1.SetError(txtCroissPopNb, "Le taux de croissance des nombres d'assurés doit être positif ou nul")
            End If
        End If
    End Sub
    Private Sub txtCroissPopNb_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCroissPopNb.Validated
        _controleurOMANE.controleTraitements.controleMoteurMethode2.setCroissPopAssuNb(txtCroissPopNb.value)
    End Sub

    Private Sub txtCroissCImoyen_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCroissCImoyen.Validated
        _controleurOMANE.controleTraitements.controleMoteurMethode2.setCroissCapIni(txtCroissCImoyen.value)
    End Sub
    Private Sub txtCroissCImoyen_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtCroissCImoyen.Validating
        If Not e.Cancel = True Then
            If Not CInt(txtCroissCImoyen.Text) >= 0 Then
                e.Cancel = True
                txtCroissCImoyen.Select(0, txtCroissCImoyen.Text.Length)
                ErrorProvider1.SetError(txtCroissCImoyen, "Le taux de croissance des capitaux initiaux moyens doit être positif ou nul")
            End If
        End If
    End Sub

#End Region

#Region "Boutons d'exécution"
    Private Sub btn_ExecuteCalculs_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_ExecuteCalculsScenCent.Click
        _controleurOMANE.controleTraitements.controleMoteurMethode2.calculeScenCent()
    End Sub
    Private Sub btn_ExportEXCEL_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_ExportEXCEL.Click
        Dim b As Boolean
        Dim xlEtude As New gestionExcelTxGar2OMANE(b, _universBDD, _universBDD.ListeParametres)
        Dim SaveFileDialog1 As New SaveFileDialog
        SaveFileDialog1.InitialDirectory = csteEmplacementSorties
        SaveFileDialog1.Filter = "Fichiers Excel|*.xls;*.xlsx"

        If SaveFileDialog1.ShowDialog() = DialogResult.OK Then

        If b Then

                xlEtude.BeginMAJ()
                xlEtude.ExcelAffParamFichier()
                xlEtude.ExcelAffParamTranches()
                xlEtude.ExcelAffSegmentation()
                xlEtude.ExcelAffExtraction()
                xlEtude.EndMAJ()
                xlEtude.EnregistrerSous(SaveFileDialog1.FileName)

            End If

        End If

    End Sub
#End Region

#End Region

#Region "Onglet de projection des comptes"

    Private Sub txtNbAnneesProj_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNbAnneesProj.Validated
        _universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.nombreAnneesProjection = txtNbAnneesProj.value
    End Sub
    Private Sub txtNbAnneesProj_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtNbAnneesProj.Validating

    End Sub

    Private Sub txt1ereAnneeProj_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt1ereAnneeProj.Validated
        _universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.anneePremiereGeneration = txt1ereAnneeProj.value
    End Sub

    Private Sub cbxUnite_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxUnite.SelectedIndexChanged
        Dim unite As Double = 1
        If cbxUnite.SelectedItem = "€" Then
            unite = 1
        ElseIf cbxUnite.SelectedItem = "K€" Then
            unite = 1000
        ElseIf cbxUnite.SelectedItem = "M€" Then
            unite = 1000000
        ElseIf cbxUnite.SelectedItem = "1000M€" Then
            unite = 1000000000
        End If
        _vueCompteResultat.unite = unite
        _vueBilan.unite = unite
        _vueIndicateurs.unite = unite
    End Sub
    Private Sub cbxPMdc_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxPMdc.SelectedValueChanged
        Dim hasPMdc As Boolean = IIf(cbxPMdc.SelectedItem = "Oui", True, False)
        _universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.hasPMdc = hasPMdc
    End Sub
    Private Sub cbxPMrente_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxPMrente.SelectedValueChanged
        Dim hasPMrente As Boolean = IIf(cbxPMrente.SelectedItem = "Oui", True, False)
        _universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.hasPMrente = hasPMrente
    End Sub
    Private Sub cbxPPRC_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxPPRC.SelectedValueChanged
        Dim hasPPRC As Boolean = IIf(cbxPPRC.SelectedItem = "Oui", True, False)
        _universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.hasPPRC = hasPPRC
    End Sub
    Private Sub cbxIdGeneration_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxIdGeneration.SelectedValueChanged
        Dim idGeneration As Integer
        If cbxIdGeneration.SelectedItem = "Tous" Then
            idGeneration = 0
        Else
            idGeneration = CInt(cbxIdGeneration.SelectedItem)
        End If
        _universBDD.listeTraitements.getTraitMoteurMethode2.filtreGeneration = idGeneration
    End Sub
    Private Sub cbxIdSegment_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbxIdSegment.SelectedValueChanged
        Dim idSegment As Integer
        If cbxIdSegment.SelectedItem = "Tous" Then
            idSegment = 0
        Else
            idSegment = CInt(cbxIdSegment.SelectedItem)
        End If
        _universBDD.listeTraitements.getTraitMoteurMethode2.filtreSegment = idSegment
    End Sub

    Private Sub btnAugmenteDecimalesCR_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAugmenteDecimalesCR.Click
        Dim vueCompteResultat As PTIC_vueCompteDeResultat = Me.tbp_CompteResultat.Controls.Find("PtiC_CompteDeResultat", True)(0)
        vueCompteResultat.nbVirgules = vueCompteResultat.nbVirgules + 1
    End Sub
    Private Sub btnReduitDecimalesCR_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnReduitDecimalesCR.Click
        Dim vueCompteResultat As PTIC_vueCompteDeResultat = Me.tbp_CompteResultat.Controls.Find("PtiC_CompteDeResultat", True)(0)
        vueCompteResultat.nbVirgules = vueCompteResultat.nbVirgules - 1
    End Sub
    Private Sub BtnAugmenteDecimalesBilan_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnAugmenteDecimalesBilan.Click
        Dim vueBilan As PTIC_vueBilan = Me.tbp_Bilan.Controls.Find("PtiC_Bilan", True)(0)
        vueBilan.nbVirgules = vueBilan.nbVirgules + 1
    End Sub
    Private Sub btnDiminueDecimalesBilan_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDiminueDecimalesBilan.Click
        Dim vueBilan As PTIC_vueBilan = Me.tbp_Bilan.Controls.Find("PtiC_Bilan", True)(0)
        vueBilan.nbVirgules = vueBilan.nbVirgules - 1
    End Sub
    Private Sub btnAugmenteDecimalesIndic_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAugmenteDecimalesIndic.Click
        Dim vueIndicateurs As PTIC_vueIndicateurs = Me.tbp_Indicateurs.Controls.Find("PtiC_Indicateurs", True)(0)
        vueIndicateurs.nbVirgules = vueIndicateurs.nbVirgules + 1
    End Sub
    Private Sub btnDiminueDecimalesIndic_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDiminueDecimalesIndic.Click
        Dim vueIndicateurs As PTIC_vueIndicateurs = Me.tbp_Indicateurs.Controls.Find("PtiC_Indicateurs", True)(0)
        vueIndicateurs.nbVirgules = vueIndicateurs.nbVirgules - 1
    End Sub

#End Region

#Region "Fenêtre principale"
    Private Sub frmResultatsModele2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Dim vueCompteResultat As vueCompteDeResultat_V2 = Me.tbp_CompteResultat.Controls.Find("PtiC_CompteDeResultat", True)(0)
        Dim vueBilan As vueBilan_V2 = Me.tbp_Bilan.Controls.Find("PtiC_Bilan", True)(0)
        Dim vueIndicateurs As vueIndicateurs_V2 = Me.tbp_Indicateurs.Controls.Find("PtiC_Indicateurs", True)(0)
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        moteur2.Comptes.retireObserver(vueCompteResultat)
        moteur2.Comptes.retireObserver(vueBilan)
        moteur2.Comptes.retireObserver(vueIndicateurs)
        moteur2.Comptes.retireObserver(Me)
        moteur2.retireObserver(Me)
        moteur2.scenarioCentral.retireObserver(Me)
        RemoveHandler moteur2.scenarioCentral.resultats.compteIndicateur_hasChanged, AddressOf onResultatsScenCent_Indicateurs_HasChanged
        RemoveHandler moteur2.scenarioCentral.resultats.tableEntreeEnrichie_hasChanged, AddressOf onResultatsScenCent_TbleEntree_HasChanged
        RemoveHandler moteur2.scenarioCentral.resultats.tableProjectionGen1Detaillee_hasChanged, AddressOf onResultatsScenCent_CalculsDetailles_HasChanged
    End Sub
#End Region

#End Region

#Region "Rafraichissements"

#Region "Redirection des rafraichissements demandés par le modèle et le contrôleur"

    ''' <summary>
    ''' Récupération des actualisations demandées par le modèle
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="notification"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function actualise(ByVal sender As Object, ByVal notification As Object) As PTIC_Util.resultatValidationContraintes Implements PTIC_Util.IObserver.actualise

        If TypeOf sender Is Segmentation Then
            actualiseFromSegmentation(notification)
        End If

        If TypeOf sender Is IParamV2 Then
            Dim paramModifie As IParamV2 = sender
            Dim nomParametre As String = paramModifie.nom
            actualiseFromParam(nomParametre)
        End If

        If TypeOf sender Is ComptesMoteur2 Then
            actualiseFromComptesRestitues(sender, notification)
        End If

        If TypeOf sender Is Moteur_Methode2 Then
            actualiseFromMoteurMethode2(sender, notification)
        End If

        If TypeOf sender Is moteurTauxGaranti2.scenarioCentralMoteur2 Then
            actualiseFromScenCentMoteurMethode2(sender, notification)
        End If

        Return Nothing

    End Function

    ''' <summary>
    ''' Gestion des actualisations demandées par l'objet regroupant tous les comptes
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="notification"></param>
    ''' <remarks></remarks>
    Private Sub actualiseFromComptesRestitues(ByVal sender As ComptesMoteur2, _
                                              ByVal notification As ComptesMoteur2.typeModification)
        If notification = ComptesMoteur2.typeModification.nbAnneesProjection Then
            txtNbAnneesProj.value = sender.nombreAnneesProjection
        End If
    End Sub
    ''' <summary>
    ''' Gestion des actualisations demandées par l'objet segmentation
    ''' </summary>
    ''' <param name="notification"></param>
    ''' <remarks></remarks>
    Private Sub actualiseFromSegmentation(ByVal notification As Object)

        Dim notifModifSegmentation As Segmentation.notification = notification.notification
        Dim lSegAmodifier As List(Of Correspondance) = notification.listeSegments

        Dim dicoListSegments As New Dictionary(Of String, Correspondance)
        For Each corresp As Correspondance In lSegAmodifier
            dicoListSegments.Add(corresp.description, corresp)
        Next

        If notifModifSegmentation = Segmentation.notification.ModifSegmentsRetenus Then
            Dim operation As operationCollection = notification.operation
            If operation = operationCollection.ADD Then
                refreshScCentListeSegmentation(dicoListSegments, operationCollection.ADD)
            End If
            If operation = operationCollection.REMOVE Then
                refreshScCentListeSegmentation(dicoListSegments, operationCollection.REMOVE)
            End If
        End If

    End Sub
    ''' <summary>
    ''' Gestion des actualisation demandées par les paramètres de l'étude
    ''' </summary>
    ''' <param name="nomParametre"></param>
    ''' <remarks></remarks>
    Private Sub actualiseFromParam(ByVal nomParametre As String)
        If nomParametre = csteParam.nomTx_CommiContA Then
            refreshScCentValeurUniqueTxCom(_controleurOMANE.controleListeParametres.getValeurUniqueAffichee(nomParametre))
        End If
    End Sub
    ''' <summary>
    ''' Actualisation en provenance du moteur de calcul
    ''' </summary>
    ''' <param name="moteur"></param>
    ''' <param name="notification"></param>
    ''' <remarks></remarks>
    Private Sub actualiseFromMoteurMethode2(ByVal moteur As Moteur_Methode2, ByVal notification As Moteur_Methode2.notification)

        If notification = Moteur_Methode2.notification.ModifSegmentationRetenue Then
            refreshCbxIdSegment(moteur)

        ElseIf notification = Moteur_Methode2.notification.ModifNbGenerationsProjetees Then
            refreshCbxIdGeneration(moteur)

        ElseIf notification = Moteur_Methode2.notification.EtatCalculDataTableAChange Then
            'Masquer ou afficher les onglets de résultat, selon l'état du calcul du moteur 2
            ''refreshAffichage()
            ''refreshGraphiques_1(moteur)
        End If

    End Sub


    Private Sub actualiseFromScenCentMoteurMethode2(ByVal moteur As scenarioCentralMoteur2, ByVal notification As PTIC_Util.gestionCalculs.FonctionCalcul.notification)

        If notification = gestionCalculs.FonctionCalcul.notification.ApresModifEtatCalcul Then
            'Masquer ou afficher les onglets de résultat, selon l'état du calcul du moteur 2
            refreshAffichage()
            refreshGraphiques_1(moteur)
        End If

    End Sub

#End Region

#Region "Rafraichissements élémentaires"

    Public Sub refreshAll()

        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        refreshAffichage()
        With moteur2

            refreshNbGenProj(.nbGenProj)

            txtCroissPopNb.value = .croissPopAssuNb
            txtCroissCImoyen.value = .croissCapIni

            'Le nombre d'assurés de la 1ère génération
            refreshNbPretsAssuGen1()
            'Les capitaux initiaux
            refreshCapInitiaux()
            'Le taux de commissionnement
            _bln_actualiseTextBox = False
            refreshScCentValeurUniqueTxCom(.listeParametres.Tx_CommiContA.getValeurUnique)
            _bln_actualiseTextBox = True
            refreshComptes()
            refreshModeCalculPM()
        End With
        refreshCbxIdSegment(moteur2)
        refreshCbxIdGeneration(moteur2)

        onResultatsScenCent_CalculsDetailles_HasChanged(moteur2.scenarioCentral.resultats, Nothing)
        onResultatsScenCent_TbleEntree_HasChanged(moteur2.scenarioCentral.resultats, Nothing)
        onResultatsScenCent_Indicateurs_HasChanged(moteur2.scenarioCentral.resultats, Nothing)
        refreshGraphiques_1(moteur2.scenarioCentral)
        refreshScCentListeSegmentation(_universBDD.Segmentation.Retenue, operationCollection.REPLACE)

    End Sub

    Public Sub refreshAffichage()
        With _universBDD.listeTraitements.getTraitMoteurMethode2.scenarioCentral
            If .etatCalcul = valueEtatCalcul.A_MAJ Or .etatCalcul = valueEtatCalcul.NON_INITIALISE Then
                With tbc_ImportEncours.TabPages
                    If .Contains(_ongletTableTravail) Then .Remove(_ongletTableTravail)
                    If .Contains(_ongletResultatsDetailles) Then .Remove(_ongletResultatsDetailles)
                    If .Contains(_ongletCompteResultat) Then .Remove(_ongletCompteResultat)
                    If .Contains(_ongletBilan) Then .Remove(_ongletBilan)
                    If .Contains(_ongletIndicateurs) Then .Remove(_ongletIndicateurs)
                    If .Contains(_ongletGraphiques) Then .Remove(_ongletGraphiques)
                End With
                Me.PtiC_TableLayoutPanelResScenCent.Controls.Add(Me.btn_ExecuteCalculsScenCent, 3, 6)
                btn_ExecuteCalculsScenCent.Visible = True
                btn_ExportEXCEL.Visible = False
                btn_calculSimulations.Visible = False
                Me.PtiC_TableLayoutPanelResScenCent.SetRowSpan(Me.PtiC_PanelGpeBoxResScenMut, 5)

            ElseIf .etatCalcul = valueEtatCalcul.A_JOUR Then
                With tbc_ImportEncours.TabPages
                    If Not .Contains(_ongletTableTravail) Then .Add(_ongletTableTravail)
                    If Not .Contains(_ongletResultatsDetailles) Then .Add(_ongletResultatsDetailles)
                    If Not .Contains(_ongletCompteResultat) Then .Add(_ongletCompteResultat)
                    If Not .Contains(_ongletBilan) Then .Add(_ongletBilan)
                    If Not .Contains(_ongletIndicateurs) Then .Add(_ongletIndicateurs)
                    If Not .Contains(_ongletGraphiques) Then .Add(_ongletGraphiques)
                End With
                'Mettre la mutualisation sur une ligne de moins
                Me.PtiC_TableLayoutPanelResScenCent.Controls.Add(Me.btn_ExportEXCEL, 3, 5)
                Me.PtiC_TableLayoutPanelResScenCent.Controls.Add(Me.btn_calculSimulations, 3, 6)
                btn_ExecuteCalculsScenCent.Visible = False
                btn_ExportEXCEL.Visible = True
                btn_calculSimulations.Visible = True
                Me.PtiC_TableLayoutPanelResScenCent.SetRowSpan(Me.PtiC_PanelGpeBoxResScenMut, 4)

            End If
        End With
    End Sub

    Private Sub refreshScCentListeSegmentation(ByVal dicoListSegments As Dictionary(Of String, Correspondance), ByVal operation As operationCollection)
        ltvFunc_modifCollCorresp(ltv_niveauSeg, dicoListSegments, operation)
    End Sub
    Private Sub refreshCapInitiaux()
        With _universBDD.listeTraitements.getTraitMoteurMethode2
            txtEncTotGen1.value = IIf(.capitauxInitiaux.methodeCalcul = _
                                     Moteur_Methode2.gestionParametreGlobal.typeCalcul.DepuisBase, _
                                     .capitauxInitiaux.sommeBase, _
                                     .capitauxInitiaux.valeurPerso)
            txtEncTotGen1.ReadOnly = IIf(.capitauxInitiaux.methodeCalcul = _
                                        Moteur_Methode2.gestionParametreGlobal.typeCalcul.DepuisBase, _
                                        True, _
                                        False)
            rdbCapIni_perso.Checked = IIf(.capitauxInitiaux.methodeCalcul = Moteur_Methode2.gestionParametreGlobal.typeCalcul.DepuisBase, False, True)
            rdbCapIni_baseEntree.Checked = IIf(.capitauxInitiaux.methodeCalcul = Moteur_Methode2.gestionParametreGlobal.typeCalcul.Personnalisé, False, True)
        End With
    End Sub
    Private Sub refreshNbPretsAssuGen1()
        With _universBDD.listeTraitements.getTraitMoteurMethode2
            txtNbPretsAssuGen1.value = IIf( _
                .nbPretsAssuGen1.methodeCalcul = Moteur_Methode2.gestionParametreGlobal.typeCalcul.DepuisBase, _
                .nbPretsAssuGen1.sommeBase, _
                .nbPretsAssuGen1.valeurPerso)
            txtNbPretsAssuGen1.ReadOnly = IIf( _
                .nbPretsAssuGen1.methodeCalcul = Moteur_Methode2.gestionParametreGlobal.typeCalcul.DepuisBase, _
                True, _
                False)
            rdbNbPretsAss1_perso.Checked = IIf(.nbPretsAssuGen1.methodeCalcul = Moteur_Methode2.gestionParametreGlobal.typeCalcul.DepuisBase, _
                False, _
                True)
            rdbNbPretsAss1_baseEntree.Checked = IIf(.nbPretsAssuGen1.methodeCalcul = Moteur_Methode2.gestionParametreGlobal.typeCalcul.Personnalisé, _
                False, _
                True)
        End With
    End Sub
    Private Sub refreshScCentValeurUniqueTxCom(ByVal valeurUnique As String)
        txtTxCom.value = valeurUnique
    End Sub
    Private Sub refreshNbGenProj(ByVal nbGenerationsProj As Integer)
        txtNbGen.value = nbGenerationsProj
    End Sub
    Private Sub refreshComptes()
        With _universBDD.listeTraitements.getTraitMoteurMethode2
            txtNbAnneesProj.value = .Comptes.nombreAnneesProjection
            txt1ereAnneeProj.value = .Comptes.anneePremiereGeneration
        End With
    End Sub
    Private Sub refreshModeCalculPM()
        cbxPMdc.SelectedItem = IIf(_universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.hasPMdc, "Oui", "Non")
        cbxPMrente.SelectedItem = IIf(_universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.hasPMrente, "Oui", "Non")
        cbxPPRC.SelectedItem = IIf(_universBDD.listeTraitements.getTraitMoteurMethode2.Comptes.hasPPRC, "Oui", "Non")
    End Sub
    Private Sub refreshCbxIdSegment(ByVal moteur As Moteur_Methode2)
        cbxIdSegment.BeginUpdate()
        'Rafraichissement de la liste de choix des segments possibles
        cbxIdSegment.BeginUpdate()
        cbxIdSegment.Items.Clear()
        For i As Integer = 1 To moteur.nbSegments
            cbxIdSegment.Items.Add(CStr(i))
        Next
        cbxIdSegment.Items.Add("Tous")
        cbxIdSegment.EndUpdate()
        cbxIdSegment.SelectedItem = IIf(moteur.filtreSegment = 0, "Tous", CStr(moteur.filtreSegment))
    End Sub
    Private Sub refreshCbxIdGeneration(ByVal moteur As Moteur_Methode2)
        '.nbGenProj
        'Rafraichissement de la liste de choix des segments possibles
        cbxIdGeneration.BeginUpdate()
        cbxIdGeneration.Items.Clear()
        For i As Integer = 1 To moteur.nbGenProj
            cbxIdGeneration.Items.Add(CStr(i))
        Next
        cbxIdGeneration.Items.Add("Tous")
        cbxIdGeneration.EndUpdate()
        cbxIdGeneration.SelectedItem = IIf(moteur.filtreGeneration = 0, "Tous", CStr(moteur.filtreGeneration))
    End Sub
    Private Sub refreshDgv_tbleTravail()

        'Ajout des colonnes des variables de segmentation
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim segmentationEtude As Dictionary(Of String, Correspondance) = _universBDD.Segmentation.Retenue
        dgv_tbleTravail.DataSource = moteur2.scenarioCentral.resultats.TableEntreeEnrichie

        For Each corresp As Correspondance In segmentationEtude.Values
            dgv_tbleTravail.Columns.Add(corresp.chOutil.Nom, corresp.description)
            dgv_tbleTravail.Columns(corresp.chOutil.Nom).DataPropertyName = corresp.chOutil.Nom
        Next

        dgv_tbleTravail.Columns.Add(nomSumCSR, "Capitaux assurés en décès")
        dgv_tbleTravail.Columns(nomSumCSR).DataPropertyName = nomSumCSR
        dgv_tbleTravail.Columns(nomSumCSR).DefaultCellStyle.Format = "#,##0 €"

        dgv_tbleTravail.Columns.Add(nomSumCapIni, "Capitaux initiaux de la base")
        dgv_tbleTravail.Columns(nomSumCapIni).DataPropertyName = nomSumCapIni
        dgv_tbleTravail.Columns(nomSumCapIni).DefaultCellStyle.Format = "#,##0 €"

        dgv_tbleTravail.Columns.Add(nomNbPretsXassu, "Nombre de prêts du segment dans la base")
        dgv_tbleTravail.Columns(nomNbPretsXassu).DataPropertyName = nomNbPretsXassu

        dgv_tbleTravail.Columns.Add("nbPretsAssuMoteur", "Nombre de prêts du segment pour l'étude")
        dgv_tbleTravail.Columns("nbPretsAssuMoteur").DataPropertyName = "nbPretsAssuMoteur"

        dgv_tbleTravail.Columns.Add(nomPComDC_Derog_Actu, "Prime commerciale DC dérogée")
        dgv_tbleTravail.Columns(nomPComDC_Derog_Actu).DataPropertyName = nomPComDC_Derog_Actu
        dgv_tbleTravail.Columns(nomPComDC_Derog_Actu).DefaultCellStyle.Format = "#,##0.### %"

        dgv_tbleTravail.Columns.Add(nomPComDC_Non_Derog_Actu, "Prime commerciale DC non dérogée")
        dgv_tbleTravail.Columns(nomPComDC_Non_Derog_Actu).DataPropertyName = nomPComDC_Non_Derog_Actu
        dgv_tbleTravail.Columns(nomPComDC_Non_Derog_Actu).DefaultCellStyle.Format = "#,##0.### %"

        dgv_tbleTravail.Columns.Add(nomPourDC_Derog_Actu, "Pourcentage de dérogation accordées en DC")
        dgv_tbleTravail.Columns(nomPourDC_Derog_Actu).DataPropertyName = nomPourDC_Derog_Actu
        dgv_tbleTravail.Columns(nomPourDC_Derog_Actu).DefaultCellStyle.Format = "#,##0.### %"

        dgv_tbleTravail.Columns.Add(nomPourINCINV_Derog_Actu, "Pourcentage de dérogation accordées en INCINV")
        dgv_tbleTravail.Columns(nomPourINCINV_Derog_Actu).DataPropertyName = nomPourINCINV_Derog_Actu
        dgv_tbleTravail.Columns(nomPourINCINV_Derog_Actu).DefaultCellStyle.Format = "#,##0.### %"

        dgv_tbleTravail.Columns.Add(nomPComINCINV_Derog_Actu, "Prime commerciale INCINV dérogée")
        dgv_tbleTravail.Columns(nomPComINCINV_Derog_Actu).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomPComINCINV_Derog_Actu).DataPropertyName = nomPComINCINV_Derog_Actu

        dgv_tbleTravail.Columns.Add(nomPComINCINV_Non_Derog_Actu, "Prime commerciale INCINV dérogée")
        dgv_tbleTravail.Columns(nomPComINCINV_Non_Derog_Actu).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomPComINCINV_Non_Derog_Actu).DataPropertyName = nomPComINCINV_Non_Derog_Actu

        dgv_tbleTravail.Columns.Add(nomTx_abat_MalaNonObje, nomTx_abat_MalaNonObje)
        dgv_tbleTravail.Columns(nomTx_abat_MalaNonObje).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTx_abat_MalaNonObje).DataPropertyName = nomTx_abat_MalaNonObje

        dgv_tbleTravail.Columns.Add(nomTx_MajoPrudSinINCINV, nomTx_MajoPrudSinINCINV)
        dgv_tbleTravail.Columns(nomTx_MajoPrudSinINCINV).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTx_MajoPrudSinINCINV).DataPropertyName = nomTx_MajoPrudSinINCINV

        dgv_tbleTravail.Columns.Add(nomTx_CommiContA, nomTx_CommiContA)
        dgv_tbleTravail.Columns(nomTx_CommiContA).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTx_CommiContA).DataPropertyName = nomTx_CommiContA

        dgv_tbleTravail.Columns.Add(nomTx_fraiGestA, nomTx_fraiGestA)
        dgv_tbleTravail.Columns(nomTx_fraiGestA).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTx_fraiGestA).DataPropertyName = nomTx_fraiGestA

        dgv_tbleTravail.Columns.Add(nomAge_FinDC, "Age de fin de la garantie Décès")
        dgv_tbleTravail.Columns(nomAge_FinDC).DefaultCellStyle.Format = "#,### ans"
        dgv_tbleTravail.Columns(nomAge_FinDC).DataPropertyName = nomAge_FinDC

        dgv_tbleTravail.Columns.Add(nomAge_FinINCINV, "Age de fin de la garantie INC/INV")
        dgv_tbleTravail.Columns(nomAge_FinINCINV).DefaultCellStyle.Format = "#,### ans"
        dgv_tbleTravail.Columns(nomAge_FinINCINV).DataPropertyName = nomAge_FinINCINV

        dgv_tbleTravail.Columns.Add(nomTx_Majo_sinDCPTIA, nomTx_Majo_sinDCPTIA)
        dgv_tbleTravail.Columns(nomTx_Majo_sinDCPTIA).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTx_Majo_sinDCPTIA).DataPropertyName = nomTx_Majo_sinDCPTIA

        dgv_tbleTravail.Columns.Add(nomCapIni, nomCapIni)
        dgv_tbleTravail.Columns(nomCapIni).DefaultCellStyle.Format = "#,### €"
        dgv_tbleTravail.Columns(nomCapIni).DataPropertyName = nomCapIni

        dgv_tbleTravail.Columns.Add(nomDuree_Actu, nomDuree_Actu)
        dgv_tbleTravail.Columns(nomDuree_Actu).DefaultCellStyle.Format = "#,### mois"
        dgv_tbleTravail.Columns(nomDuree_Actu).DataPropertyName = nomDuree_Actu

        dgv_tbleTravail.Columns.Add(nomTxMort_Actu, nomTxMort_Actu)
        dgv_tbleTravail.Columns(nomTxMort_Actu).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTxMort_Actu).DataPropertyName = nomTxMort_Actu

        dgv_tbleTravail.Columns.Add(nomTxNom_Actu, nomTxNom_Actu)
        dgv_tbleTravail.Columns(nomTxNom_Actu).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTxNom_Actu).DataPropertyName = nomTxNom_Actu

        dgv_tbleTravail.Columns.Add(nomTx_TaxeAssu, nomTx_TaxeAssu)
        dgv_tbleTravail.Columns(nomTx_TaxeAssu).DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns(nomTx_TaxeAssu).DataPropertyName = nomTx_TaxeAssu

        dgv_tbleTravail.Columns.Add("txNominalPeriode", "txNominalPeriode")
        dgv_tbleTravail.Columns("txNominalPeriode").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("txNominalPeriode").DataPropertyName = "txNominalPeriode"

        dgv_tbleTravail.Columns.Add("txRembAntiPeriode", "txRembAntiPeriode")
        dgv_tbleTravail.Columns("txRembAntiPeriode").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("txRembAntiPeriode").DataPropertyName = "txRembAntiPeriode"

        dgv_tbleTravail.Columns.Add("txTechPeriode", "txTechPeriode")
        dgv_tbleTravail.Columns("txTechPeriode").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("txTechPeriode").DataPropertyName = "txTechPeriode"

        ''dgv_tbleTravail.Columns.Add("txEntreeINCINVmois", "txEntreeINCINVmois")
        ''dgv_tbleTravail.Columns("txEntreeINCINVmois").DefaultCellStyle.Format = "#,##0.### %"
        ''dgv_tbleTravail.Columns("txEntreeINCINVmois").DataPropertyName = "txEntreeINCINVmois"

        dgv_tbleTravail.Columns.Add("PCom_DC", "PCom_DC")
        dgv_tbleTravail.Columns("PCom_DC").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("PCom_DC").DataPropertyName = "PCom_DC"

        dgv_tbleTravail.Columns.Add("PCom_INCINV", "PCom_INCINV")
        dgv_tbleTravail.Columns("PCom_INCINV").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("PCom_INCINV").DataPropertyName = "PCom_INCINV"

        dgv_tbleTravail.Columns.Add("FdsPropresSurMSR", "FdsPropresSurMSR")
        dgv_tbleTravail.Columns("FdsPropresSurMSR").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("FdsPropresSurMSR").DataPropertyName = "FdsPropresSurMSR"

        dgv_tbleTravail.Columns.Add("prixPTIA", "prixPTIA")
        dgv_tbleTravail.Columns("prixPTIA").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("prixPTIA").DataPropertyName = "prixPTIA"

        dgv_tbleTravail.Columns.Add("chgtSecuINCAPINVAL", "chgtSecuINCAPINVAL")
        dgv_tbleTravail.Columns("chgtSecuINCAPINVAL").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("chgtSecuINCAPINVAL").DataPropertyName = "chgtSecuINCAPINVAL"

        dgv_tbleTravail.Columns.Add("TxRdtActifs", "TxRdtActifs")
        dgv_tbleTravail.Columns("TxRdtActifs").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("TxRdtActifs").DataPropertyName = "TxRdtActifs"

        dgv_tbleTravail.Columns.Add("TxCouvEmprSub", "TxCouvEmprSub")
        dgv_tbleTravail.Columns("TxCouvEmprSub").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("TxCouvEmprSub").DataPropertyName = "TxCouvEmprSub"

        dgv_tbleTravail.Columns.Add("TxImpoIS", "TxImpoIS")
        dgv_tbleTravail.Columns("TxImpoIS").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("TxImpoIS").DataPropertyName = "TxImpoIS"

        dgv_tbleTravail.Columns.Add("coutEmprSub", "coutEmprSub")
        dgv_tbleTravail.Columns("coutEmprSub").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("coutEmprSub").DataPropertyName = "coutEmprSub"

        dgv_tbleTravail.Columns.Add("TxRendtAttenduActionnaires", "TxRendtAttenduActionnaires")
        dgv_tbleTravail.Columns("TxRendtAttenduActionnaires").DefaultCellStyle.Format = "#,##0.### %"
        dgv_tbleTravail.Columns("TxRendtAttenduActionnaires").DataPropertyName = "TxRendtAttenduActionnaires"
    End Sub

    Private Sub onResultatsScenCent_TbleEntree_HasChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim resultats As moteurTauxGaranti2.Moteur_Methode2.resultatsMoteur2 = CType(sender, moteurTauxGaranti2.Moteur_Methode2.resultatsMoteur2)
        dgv_tbleTravail.Columns.Clear()
        dgv_tbleTravail.AutoGenerateColumns = False
        If resultats.TableEntreeEnrichie IsNot Nothing Then
            refreshDgv_tbleTravail()
        End If
    End Sub
    Private Sub onResultatsScenCent_CalculsDetailles_HasChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim resultats As moteurTauxGaranti2.Moteur_Methode2.resultatsMoteur2 = CType(sender, moteurTauxGaranti2.Moteur_Methode2.resultatsMoteur2)
        With resultats
            If Not .TableProjectionGen1Detaillee Is Nothing Then
                dgv_tbleCalculsDetailles.DataSource = .TableProjectionGen1Detaillee
            End If
        End With
        'Gestion des formats
        ''With dgv_tbleTravail.Columns
        ''If .Contains("numGen") Then .Item("numSegment").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("numSegment") Then .Item("numSegment").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("anneeDeroulement") Then .Item("anneeDeroulement").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("anneeReelle") Then .Item("anneeReelle").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("CSRDCfin") Then .Item("CSRDCfin").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("cotisDC") Then .Item("cotisDC").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("sinDC") Then .Item("sinDC").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("PM_DCtheo") Then .Item("PM_DCtheo").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("cotisIT") Then .Item("cotisIT").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("sinIT") Then .Item("sinIT").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("PM_Rente") Then .Item("PM_Rente").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("PPRC") Then .Item("PPRC").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("PM_ITtheo") Then .Item("PM_ITtheo").DefaultCellStyle.Format = "#,##0"
        ''If .Contains("MSR_Vie") Then .Item("MSR_Vie").DefaultCellStyle.Format = "#,##0"
        ''End With
    End Sub
    Private Sub onResultatsScenCent_Indicateurs_HasChanged(ByVal sender As Object, ByVal e As EventArgs)
        With CType(sender, moteurTauxGaranti2.Moteur_Methode2.resultatsMoteur2)
            If Not .compteIndicateur Is Nothing Then
                labelTRI.Text = Format(.compteIndicateur.TRI, "#,##0.00%")
                labelVAN.Text = Format(.compteIndicateur.VAN, "#,##0 €")
                labelVANprimes.Text = Format(.compteIndicateur.VANprimes, "#,##0 €")
            End If
        End With
    End Sub

#Region "Non encore utilisés"
    Public Sub refreshScCentGaugeSP()

        Me.PtiC_TableLayoutPanelResScenCent.SetRowSpan(Me.PtiC_PanelGpeBoxResScenMut, 2)
        PtiC_PanelGpeBoxSPscenCent.Visible = True

        Dim zgc As ZedGraph.ZedGraphControl = ZedGraphGauge
        Dim SP_scenCentral As Double = _universBDD.listeTraitements.getTraitMoteurMethode1.ratioSP_scenCentral

        zgc.Visible = True

        Dim myPane As ZedGraph.GraphPane = zgc.GraphPane
        myPane.CurveList.Clear()
        'myPane.

        'Définition du titre
        ''myPane.Title.Text = "Ratio S/P espéré"
        ''myPane.Title.FontSpec.Size = 18
        myPane.Title.IsVisible = False
        myPane.Border.IsVisible = False

        'Remplissage du graph en gris
        ''master.Fill.Color = ()
        myPane.Fill = New ZedGraph.Fill(Color.White)
        'Fond en dégradé de bleu
        'myPane.Chart.Fill = New ZedGraph.Fill(Color.White, Color.SkyBlue, 45.0F)

        'Pas d'affichage des axes pour la jauge
        myPane.XAxis.IsVisible = False
        myPane.Y2Axis.IsVisible = False
        myPane.YAxis.IsVisible = False

        myPane.Legend.Position = ZedGraph.LegendPos.BottomCenter
        myPane.Legend.FontSpec.Size = 18

        'Define needles; can add more than one
        Dim coord As Double = 0
        If SP_scenCentral >= 1.5 Then
            coord = 0
        ElseIf SP_scenCentral <= 0.5 Then
            coord = 100
        Else
            coord = 150 - SP_scenCentral * 100
        End If
        Dim gg1 As ZedGraph.GasGaugeNeedle = New ZedGraph.GasGaugeNeedle("Scénario central", coord, Color.Black)
        myPane.CurveList.Add(gg1)
        'Define all regions
        Dim ggr1 As New ZedGraph.GasGaugeRegion("Dangereux", 0, 55, Color.Red)
        Dim ggr2 As New ZedGraph.GasGaugeRegion("Acceptable", 55, 70, Color.Yellow)
        Dim ggr3 As New ZedGraph.GasGaugeRegion("Idéal", 70, 100, Color.Green)
        'Add the curves
        myPane.CurveList.Add(ggr1)
        myPane.CurveList.Add(ggr2)
        myPane.CurveList.Add(ggr3)

        myPane.Chart.Border.IsVisible = False
        myPane.Chart.Fill.Color = Color.White
        myPane.Chart.Fill.Type = ZedGraph.FillType.Solid
        myPane.Legend.Border.IsVisible = False
        myPane.Legend.Fill.Color = Color.White
        myPane.Legend.Fill.Type = ZedGraph.FillType.Solid

        zgc.AxisChange()

    End Sub
#End Region

#End Region

#End Region

#Region "Gestion des graphiques"
    Protected numPage As Integer = 1

    Public Sub refreshGraphiques_1(ByVal scenCentMoteur2 As scenarioCentralMoteur2)

        Try

            If scenCentMoteur2.etatCalcul <> valueEtatCalcul.NON_INITIALISE Then
                'Déclaration du conteneur de graphique et nettoyage des éventuels graphs existants dans la collection
                Dim master As ZedGraph.MasterPane = ZedGraphMoteur2_1.MasterPane
                master.PaneList.Clear()

                'Affichage du titre et paramétrage de la marge extérieure à 10 pixels
                master.Title.IsVisible = True
                master.Margin.All = 10
                affichePage(master, scenCentMoteur2)

                'Réinitialisation des axes des graphiques du conteneur
                ZedGraphMoteur2_1.AxisChange()
                Dim g As Graphics = Me.CreateGraphics
                master.SetLayout(g, ZedGraph.PaneLayout.ExplicitRow32)

                Me.Invalidate()
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Function getGPaneROE_1(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        'ROE (résultat net / fonds propres ouverture)
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim GpaneROE As New ZedGraph.GraphPane()
        Dim listeROE As New ZedGraph.PointPairList
        With scenCentMoteur2.resultats.compteIndicateur
            For i As Integer = 0 To .ROE_resNetsFdsPropres.Count - 1
                listeROE.Add(moteur2.Comptes.anneePremiereGeneration + i, .ROE_resNetsFdsPropres(i))
            Next
        End With
        Dim ligneROE As ZedGraph.LineItem
        ligneROE = GpaneROE.AddCurve("ROE (résultat net / fonds propres ouverture)", listeROE, Color.Blue, ZedGraph.SymbolType.Diamond)
        miseEnFormeGraph(GpaneROE, "ROE globaux (résultat net / fonds propres ouverture)", "Année comptable", "ROE", 20)
        ligneROE.Line.Width = 1.75F
        GpaneROE.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1
        Return GpaneROE
    End Function
    Private Function getGPaneNbCotisantsDC(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim resultatProjectionAgregee As projectionAnneesReelles = scenCentMoteur2.resultats.ProjectionGenNAnnuelle
        Dim GpaneNbCot As New ZedGraph.GraphPane()
        Dim listeNbCot As New ZedGraph.PointPairList
        With resultatProjectionAgregee
            For i As Integer = 0 To .nbCotDC.Count - 1
                listeNbCot.Add(moteur2.Comptes.anneePremiereGeneration + i, .nbCotDC(i))
            Next
        End With
        Dim ligneNbSin As ZedGraph.LineItem
        ligneNbSin = GpaneNbCot.AddCurve("Nombre de cotisants DC en fin de période", listeNbCot, Color.FromArgb(150, 144, 84), ZedGraph.SymbolType.Diamond)
        ligneNbSin.Line.Width = 1.75F
        miseEnFormeGraph(GpaneNbCot, "Nombre de cotisants DC en fin de période", "Année comptable", "Nb cotisants", 20, "#,##0")

        GpaneNbCot.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1
        Return GpaneNbCot
        Return Nothing
    End Function
    Private Function getGPaneNbSinDC(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim resultatProjectionAgregee As projectionAnneesReelles = scenCentMoteur2.resultats.ProjectionGenNAnnuelle
        'ROE (résultat net / fonds propres ouverture)
        Dim GpaneNbSin As New ZedGraph.GraphPane()
        Dim listeNbSin As New ZedGraph.PointPairList
        With resultatProjectionAgregee
            For i As Integer = 0 To .nbSinDC.Count - 1
                listeNbSin.Add(moteur2.Comptes.anneePremiereGeneration + i, .nbSinDC(i))
            Next
        End With
        Dim ligneNbSin As ZedGraph.LineItem
        ligneNbSin = GpaneNbSin.AddCurve("Nombre de sinistres DC", listeNbSin, Color.Red, ZedGraph.SymbolType.Diamond)
        ligneNbSin.Line.Width = 1.75F
        miseEnFormeGraph(GpaneNbSin, "Evolution du nombre de sinistres DC", "Année comptable", "Nb sinistres", 20, "#,##0")

        GpaneNbSin.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneNbSin
        Return Nothing
    End Function
    Private Function getGPaneProvisionsDC(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim GpaneProvisionsDC As New ZedGraph.GraphPane()
        Dim listePrimesTechniquesDC As New ZedGraph.PointPairList
        Dim listePrimesCommercialesDC As New ZedGraph.PointPairList
        Dim listeSinistresDC As New ZedGraph.PointPairList
        Dim listeProvTheoDC As New ZedGraph.PointPairList
        Dim ProvTheoDC_X(moteur2.Comptes.nombreAnneesProjection - 1) As Double
        Dim ProvTheoDC_Y(moteur2.Comptes.nombreAnneesProjection - 1) As Double
        With moteur2.Comptes
            For i As Integer = 0 To .nombreAnneesProjection - 1
                listePrimesCommercialesDC.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTVie.primesDC(i))
                listePrimesTechniquesDC.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTVie.primesDC(i) * (1 - moteur2.listeParametres.Tx_fraiGestA.getValeurUnique - moteur2.listeParametres.Tx_CommiContA.getValeurUnique))
                listeSinistresDC.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTVie.sinRegles(i))
                listeProvTheoDC.Add(.anneePremiereGeneration + i, .compteTechniqueVie.parametresEntree.pmDCclotTheo(i))
                ProvTheoDC_X(i) = .anneePremiereGeneration + i
                ProvTheoDC_Y(i) = .compteTechniqueVie.parametresEntree.pmDCclotTheo(i)
            Next
        End With

        Dim lignePComDC As ZedGraph.LineItem
        lignePComDC = GpaneProvisionsDC.AddCurve("Primes commerciales DC", listePrimesCommercialesDC, Color.Orange, ZedGraph.SymbolType.Diamond)
        lignePComDC.Line.Width = 1.75F

        Dim lignePTechDC As ZedGraph.LineItem
        lignePTechDC = GpaneProvisionsDC.AddCurve("Primes techniques DC", listePrimesTechniquesDC, Color.Blue, ZedGraph.SymbolType.Diamond)
        lignePTechDC.Line.Width = 1.75F

        Dim ligneSinDC As ZedGraph.LineItem
        ligneSinDC = GpaneProvisionsDC.AddCurve("Sinistres réglés DC", listeSinistresDC, Color.Red, ZedGraph.SymbolType.Diamond)
        ligneSinDC.Line.Width = 1.75F

        Dim BarProvTheoDC As ZedGraph.BarItem
        BarProvTheoDC = GpaneProvisionsDC.AddBar("PM fin théorique en DC", _
                                                 ProvTheoDC_X, _
                                                 ProvTheoDC_Y, _
                                                 Color.YellowGreen)
        ''BarProvTheoDC.

        miseEnFormeGraph(GpaneProvisionsDC, "Primes / Sinistres / PM de la garantie décès", "Année comptable", "Montant en €", 20, "#,###")

        Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 14, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
        fontLegend.Border.IsVisible = False
        GpaneProvisionsDC.Legend.IsVisible = True
        GpaneProvisionsDC.Legend.FontSpec = fontLegend
        GpaneProvisionsDC.Legend.Position = ZedGraph.LegendPos.BottomFlushLeft

        GpaneProvisionsDC.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneProvisionsDC

    End Function
    Private Function getGPaneSPDC(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        'S/P par rapport aux primes commerciales
        'S/P par rapport aux primes techniques

        Dim GpaneSP As New ZedGraph.GraphPane()
        Dim listeSP_TechniquesDC As New ZedGraph.PointPairList
        Dim listeSP_CommercialesDC As New ZedGraph.PointPairList
        With moteur2.Comptes
            For i As Integer = 0 To .nombreAnneesProjection - 1
                listeSP_TechniquesDC.Add(moteur2.Comptes.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteIndicateur.SP_techDC(i))
                listeSP_CommercialesDC.Add(moteur2.Comptes.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTVie.sinRegles(i) / _
                                          scenCentMoteur2.resultats.compteCRTVie.primesDC(i))
            Next
        End With

        Dim ligneSP_TechniquesDC As ZedGraph.LineItem
        ligneSP_TechniquesDC = GpaneSP.AddCurve("S/P technique DC", listeSP_TechniquesDC, Color.FromArgb(88, 29, 116), ZedGraph.SymbolType.Diamond)
        ligneSP_TechniquesDC.Line.Width = 1.75F

        Dim ligneSP_CommercialesDC As ZedGraph.LineItem
        ligneSP_CommercialesDC = GpaneSP.AddCurve("S/P commercial DC", listeSP_CommercialesDC, Color.YellowGreen, ZedGraph.SymbolType.Diamond)
        ligneSP_CommercialesDC.Line.Width = 1.75F

        miseEnFormeGraph(GpaneSP, "Ratio S/P annuels en DC", "Année comptable", "", 20)

        Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 14, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
        fontLegend.Border.IsVisible = False
        ''GpaneSP.Legend.Border.IsVisible = False
        GpaneSP.Legend.IsVisible = True
        GpaneSP.Legend.FontSpec = fontLegend
        GpaneSP.Legend.Position = ZedGraph.LegendPos.BottomFlushLeft

        GpaneSP.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneSP

    End Function

    Private Function getGPaneNbCotisantsINCINV(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim resultatProjectionAgregee As projectionAnneesReelles = scenCentMoteur2.resultats.ProjectionGenNAnnuelle
        'ROE (résultat net / fonds propres ouverture)
        Dim GpaneNbCot As New ZedGraph.GraphPane()
        Dim listeNbCot As New ZedGraph.PointPairList
        With resultatProjectionAgregee
            For i As Integer = 0 To .nbCotDC.Count - 1
                listeNbCot.Add(moteur2.Comptes.anneePremiereGeneration + i, .nbCotINCINV(i))
            Next
        End With
        Dim ligneNbSin As ZedGraph.LineItem
        ligneNbSin = GpaneNbCot.AddCurve("Nombre de cotisants INCAP/INVAL en fin de période", listeNbCot, Color.FromArgb(150, 144, 84), ZedGraph.SymbolType.Diamond)
        ligneNbSin.Line.Width = 1.75F
        miseEnFormeGraph(GpaneNbCot, "Nombre de cotisants INCAP/INVAL en fin de période", "Année comptable", "Nb cotisants", 20, "#,##0")

        GpaneNbCot.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1
        Return GpaneNbCot
        Return Nothing
    End Function
    Private Function getGPaneNbSinINCINV(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim resultatProjectionAgregee As projectionAnneesReelles = scenCentMoteur2.resultats.ProjectionGenNAnnuelle
        'ROE (résultat net / fonds propres ouverture)
        Dim GpaneNbSinINCINV As New ZedGraph.GraphPane()
        Dim listeNbSinINCINV As New ZedGraph.PointPairList
        With resultatProjectionAgregee
            For i As Integer = 0 To .nbSinDC.Count - 1
                listeNbSinINCINV.Add(moteur2.Comptes.anneePremiereGeneration + i, .nbSinINCINV(i))
            Next
        End With
        Dim ligneNbSin As ZedGraph.LineItem
        ligneNbSin = GpaneNbSinINCINV.AddCurve("Nombre de sinistres INCAP/INVAL", listeNbSinINCINV, Color.Red, ZedGraph.SymbolType.Diamond)
        ligneNbSin.Line.Width = 1.75F
        miseEnFormeGraph(GpaneNbSinINCINV, "Evolution du nombre de sinistres INCAP/INVAL", "Année comptable", "Nb sinistres", 20, "#,##0")

        GpaneNbSinINCINV.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneNbSinINCINV
        Return Nothing
    End Function
    Private Function getGPaneProvisionsINCINV(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim GpaneProvisionsINCINV As New ZedGraph.GraphPane()
        Dim listePrimesTechniquesINCINV As New ZedGraph.PointPairList
        Dim listePrimesCommercialesINCINV As New ZedGraph.PointPairList
        Dim listeSinistresINCINV As New ZedGraph.PointPairList
        Dim listeProvTheoINCINV As New ZedGraph.PointPairList
        Dim ProvTheoINCINV_X(moteur2.Comptes.nombreAnneesProjection - 1) As Double
        Dim ProvTheoINCINV_Y(moteur2.Comptes.nombreAnneesProjection - 1) As Double
        With moteur2.Comptes
            For i As Integer = 0 To .nombreAnneesProjection - 1
                listePrimesCommercialesINCINV.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTNonVie.primesIT(i))
                listePrimesTechniquesINCINV.Add(.anneePremiereGeneration + i, (scenCentMoteur2.resultats.compteCRTNonVie.primesIT(i) / (1 + moteur2.listeParametres.Tx_TaxeAssu.getValeurUnique)) * (1 - moteur2.listeParametres.Tx_fraiGestA.getValeurUnique - moteur2.listeParametres.Tx_CommiContA.getValeurUnique))
                listeSinistresINCINV.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTNonVie.sinReglesIT(i))
                listeProvTheoINCINV.Add(.anneePremiereGeneration + i, .compteTechniqueNonVie.parametresEntree.pmITclotTheo(i))
                ProvTheoINCINV_X(i) = .anneePremiereGeneration + i
                ProvTheoINCINV_Y(i) = .compteTechniqueNonVie.parametresEntree.pmITclotTheo(i)
            Next
        End With

        Dim lignePComDC As ZedGraph.LineItem
        lignePComDC = GpaneProvisionsINCINV.AddCurve("Primes commerciales INCAP/INVAL", listePrimesCommercialesINCINV, Color.Orange, ZedGraph.SymbolType.Diamond)
        lignePComDC.Line.Width = 1.75F

        Dim lignePTechDC As ZedGraph.LineItem
        lignePTechDC = GpaneProvisionsINCINV.AddCurve("Primes techniques INCAP/INVAL", listePrimesTechniquesINCINV, Color.Blue, ZedGraph.SymbolType.Diamond)
        lignePTechDC.Line.Width = 1.75F

        Dim ligneSinDC As ZedGraph.LineItem
        ligneSinDC = GpaneProvisionsINCINV.AddCurve("Sinistres réglés INCAP/INVAL", listeSinistresINCINV, Color.Red, ZedGraph.SymbolType.Diamond)
        ligneSinDC.Line.Width = 1.75F

        Dim BarProvTheoDC As ZedGraph.BarItem
        BarProvTheoDC = GpaneProvisionsINCINV.AddBar("PM fin théorique en INCAP/INVAL", _
                                                 ProvTheoINCINV_X, _
                                                 ProvTheoINCINV_Y, _
                                                 Color.YellowGreen)
        ''BarProvTheoDC.

        miseEnFormeGraph(GpaneProvisionsINCINV, "Primes / Sinistres / PM de la garantie INCAP/INVAL", "Année comptable", "Montant en €", 20, "#,###")

        Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 14, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
        fontLegend.Border.IsVisible = False
        ''GpaneProvisionsINCINV.Legend.Border.IsVisible = False
        GpaneProvisionsINCINV.Legend.IsVisible = True
        GpaneProvisionsINCINV.Legend.FontSpec = fontLegend
        GpaneProvisionsINCINV.Legend.Position = ZedGraph.LegendPos.BottomFlushLeft

        GpaneProvisionsINCINV.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneProvisionsINCINV

    End Function
    Private Function getGPaneSPINCINV(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        'S/P par rapport aux primes commerciales
        'S/P par rapport aux primes techniques

        Dim GpaneSPINCINV As New ZedGraph.GraphPane()
        Dim listeSP_TechniquesINCINV As New ZedGraph.PointPairList
        Dim listeSP_CommercialesINCINV As New ZedGraph.PointPairList
        With moteur2.Comptes
            For i As Integer = 0 To .nombreAnneesProjection - 1
                listeSP_TechniquesINCINV.Add(moteur2.Comptes.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteIndicateur.SP_techINCINV(i))
                listeSP_CommercialesINCINV.Add(moteur2.Comptes.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTNonVie.sinReglesIT(i) / _
                                          scenCentMoteur2.resultats.compteCRTNonVie.primesIT(i))
            Next
        End With

        Dim ligneSP_TechniquesINCINV As ZedGraph.LineItem
        ligneSP_TechniquesINCINV = GpaneSPINCINV.AddCurve("S/P technique INCAP/INVAL", listeSP_TechniquesINCINV, Color.FromArgb(88, 29, 116), ZedGraph.SymbolType.Diamond)
        ligneSP_TechniquesINCINV.Line.Width = 1.75F

        Dim ligneSP_CommercialesDC As ZedGraph.LineItem
        ligneSP_CommercialesDC = GpaneSPINCINV.AddCurve("S/P commercial INCAP/INVAL", listeSP_CommercialesINCINV, Color.YellowGreen, ZedGraph.SymbolType.Diamond)
        ligneSP_CommercialesDC.Line.Width = 1.75F

        miseEnFormeGraph(GpaneSPINCINV, "Ratio S/P annuels en INCAP/INVAL", "Année comptable", "", 20)

        Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 14, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
        fontLegend.Border.IsVisible = False
        ''GpaneSPINCINV.Legend.Border.IsVisible = False
        GpaneSPINCINV.Legend.IsVisible = True
        GpaneSPINCINV.Legend.FontSpec = fontLegend
        GpaneSPINCINV.Legend.Position = ZedGraph.LegendPos.BottomFlushLeft

        GpaneSPINCINV.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneSPINCINV

    End Function

    Private Function getGPaneNbCotisantsTOT(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim resultatProjectionAgregee As projectionAnneesReelles = scenCentMoteur2.resultats.ProjectionGenNAnnuelle
        'ROE (résultat net / fonds propres ouverture)
        Dim GpaneNbCot As New ZedGraph.GraphPane()
        Dim listeNbCot As New ZedGraph.PointPairList
        With resultatProjectionAgregee
            For i As Integer = 0 To .nbCotDC.Count - 1
                listeNbCot.Add(moteur2.Comptes.anneePremiereGeneration + i, .nbCotINCINV(i) + .nbCotDC(i))
            Next
        End With
        Dim ligneNbSin As ZedGraph.LineItem
        ligneNbSin = GpaneNbCot.AddCurve("Nombre de cotisants en fin de période", listeNbCot, Color.FromArgb(150, 144, 84), ZedGraph.SymbolType.Diamond)
        ligneNbSin.Line.Width = 1.75F
        miseEnFormeGraph(GpaneNbCot, "Nombre de cotisants en fin de période", "Année comptable", "Nb cotisants", 20, "#,##0")

        GpaneNbCot.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1
        Return GpaneNbCot
        Return Nothing
    End Function
    Private Function getGPaneNbSinTOT(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim resultatProjectionAgregee As projectionAnneesReelles = moteur2.Resultats.ProjectionGenNAnnuelle
        'ROE (résultat net / fonds propres ouverture)
        Dim GpaneNbSinTOT As New ZedGraph.GraphPane()
        Dim listeNbSinTOT As New ZedGraph.PointPairList
        With resultatProjectionAgregee
            For i As Integer = 0 To .nbSinDC.Count - 1
                listeNbSinTOT.Add(moteur2.Comptes.anneePremiereGeneration + i, .nbSinDC(i) + .nbSinINCINV(i))
            Next
        End With
        Dim ligneNbSin As ZedGraph.LineItem
        ligneNbSin = GpaneNbSinTOT.AddCurve("Nombre de sinistres", listeNbSinTOT, Color.Red, ZedGraph.SymbolType.Diamond)
        ligneNbSin.Line.Width = 1.75F
        miseEnFormeGraph(GpaneNbSinTOT, "Evolution du nombre de sinistres", "Année comptable", "Nb sinistres", 20, "#,##0")

        GpaneNbSinTOT.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneNbSinTOT
        Return Nothing
    End Function
    Private Function getGPaneProvisionsTOT(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        Dim GpaneProvisionsTOT As New ZedGraph.GraphPane()
        Dim listePrimesTechniquesTOT As New ZedGraph.PointPairList
        Dim listePrimesCommercialesTOT As New ZedGraph.PointPairList
        Dim listeSinistresTOT As New ZedGraph.PointPairList
        Dim listeProvTheoTOT As New ZedGraph.PointPairList
        Dim ProvTheoTOT_X(moteur2.Comptes.nombreAnneesProjection - 1) As Double
        Dim ProvTheoTOT_Y(moteur2.Comptes.nombreAnneesProjection - 1) As Double
        With moteur2.Comptes
            For i As Integer = 0 To .nombreAnneesProjection - 1
                listePrimesCommercialesTOT.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTVie.primesDC(i) + scenCentMoteur2.resultats.compteCRTNonVie.primesIT(i))
                listePrimesTechniquesTOT.Add(.anneePremiereGeneration + i, _
                    (.compteTechniqueNonVie.resultats.primesIT(i) / (1 + moteur2.listeParametres.Tx_TaxeAssu.getValeurUnique)) * (1 - moteur2.listeParametres.Tx_fraiGestA.getValeurUnique - moteur2.listeParametres.Tx_CommiContA.getValeurUnique) _
                   + scenCentMoteur2.resultats.compteCRTVie.primesDC(i) * (1 - moteur2.listeParametres.Tx_fraiGestA.getValeurUnique - moteur2.listeParametres.Tx_CommiContA.getValeurUnique))
                listeSinistresTOT.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteCRTNonVie.sinReglesIT(i) _
                                                                    + scenCentMoteur2.resultats.compteCRTVie.sinRegles(i))
                listeProvTheoTOT.Add(.anneePremiereGeneration + i, _
                                     .compteTechniqueNonVie.parametresEntree.pmITclotTheo(i) _
                                     + .compteTechniqueVie.parametresEntree.pmDCclotTheo(i))
                ProvTheoTOT_X(i) = .anneePremiereGeneration + i
                ProvTheoTOT_Y(i) = .compteTechniqueNonVie.parametresEntree.pmITclotTheo(i)
            Next
        End With

        Dim lignePComDC As ZedGraph.LineItem
        lignePComDC = GpaneProvisionsTOT.AddCurve("Primes commerciales", listePrimesCommercialesTOT, Color.Orange, ZedGraph.SymbolType.Diamond)
        lignePComDC.Line.Width = 1.75F

        Dim lignePTechDC As ZedGraph.LineItem
        lignePTechDC = GpaneProvisionsTOT.AddCurve("Primes techniques", listePrimesTechniquesTOT, Color.Blue, ZedGraph.SymbolType.Diamond)
        lignePTechDC.Line.Width = 1.75F

        Dim ligneSinDC As ZedGraph.LineItem
        ligneSinDC = GpaneProvisionsTOT.AddCurve("Sinistres réglés", listeSinistresTOT, Color.Red, ZedGraph.SymbolType.Diamond)
        ligneSinDC.Line.Width = 1.75F

        Dim BarProvTheoDC As ZedGraph.BarItem
        BarProvTheoDC = GpaneProvisionsTOT.AddBar("PM fin théorique", _
                                                 ProvTheoTOT_X, _
                                                 ProvTheoTOT_Y, _
                                                 Color.YellowGreen)
        ''BarProvTheoDC.

        miseEnFormeGraph(GpaneProvisionsTOT, "Primes / Sinistres / Provisions", "Année comptable", "Montant en €", 20, "#,###")

        Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 14, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
        fontLegend.Border.IsVisible = False
        ''GpaneProvisionsTOT.Legend.Border.IsVisible = False
        GpaneProvisionsTOT.Legend.IsVisible = True
        GpaneProvisionsTOT.Legend.FontSpec = fontLegend
        GpaneProvisionsTOT.Legend.Position = ZedGraph.LegendPos.BottomFlushLeft

        GpaneProvisionsTOT.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneProvisionsTOT

    End Function
    Private Function getGPaneSPTOT(ByVal scenCentMoteur2 As scenarioCentralMoteur2) As ZedGraph.GraphPane
        Dim moteur2 As Moteur_Methode2 = _universBDD.listeTraitements.getTraitMoteurMethode2
        'S/P par rapport aux primes commerciales
        'S/P par rapport aux primes techniques

        Dim GpaneSPTOT As New ZedGraph.GraphPane()
        Dim listeSP_TechniquesTOT As New ZedGraph.PointPairList
        Dim listeSP_CommercialesTOT As New ZedGraph.PointPairList
        With moteur2.Comptes
            For i As Integer = 0 To .nombreAnneesProjection - 1
                listeSP_TechniquesTOT.Add(.anneePremiereGeneration + i, scenCentMoteur2.resultats.compteIndicateur.SP_techTot(i))
                listeSP_CommercialesTOT.Add(.anneePremiereGeneration + i, (scenCentMoteur2.resultats.compteCRTVie.sinRegles(i) + scenCentMoteur2.resultats.compteCRTNonVie.sinReglesIT(i)) / _
                    (scenCentMoteur2.resultats.compteCRTVie.primesDC(i) + scenCentMoteur2.resultats.compteCRTNonVie.primesIT(i)))
            Next
        End With

        Dim ligneSP_TechniquesTOT As ZedGraph.LineItem
        ligneSP_TechniquesTOT = GpaneSPTOT.AddCurve("S/P technique", listeSP_TechniquesTOT, Color.FromArgb(88, 29, 116), ZedGraph.SymbolType.Diamond)
        ligneSP_TechniquesTOT.Line.Width = 1.75F

        Dim ligneSP_CommercialesTOT As ZedGraph.LineItem
        ligneSP_CommercialesTOT = GpaneSPTOT.AddCurve("S/P commercial", listeSP_CommercialesTOT, Color.YellowGreen, ZedGraph.SymbolType.Diamond)
        ligneSP_CommercialesTOT.Line.Width = 1.75F

        miseEnFormeGraph(GpaneSPTOT, "Ratio S/P annuels", "Année comptable", "", 20)

        Dim fontLegend As New ZedGraph.FontSpec("Tahoma", 14, Color.Black, False, False, False, Color.White, Nothing, ZedGraph.FillType.Brush)
        ''fontLegend.Border.IsVisible = False
        GpaneSPTOT.Legend.Border.IsVisible = False
        GpaneSPTOT.Legend.IsVisible = True
        GpaneSPTOT.Legend.FontSpec = fontLegend
        GpaneSPTOT.Legend.Position = ZedGraph.LegendPos.BottomFlushLeft

        GpaneSPTOT.XAxis.Scale.Min = moteur2.Comptes.anneePremiereGeneration - 1

        Return GpaneSPTOT

    End Function

    Private Sub btnGraphPrec_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGraphPrec.Click
        If numPage > 1 Then
            numPage = numPage - 1
        End If
        refreshGraphiques_1(_universBDD.listeTraitements.getTraitMoteurMethode2.scenarioCentral)
        Refresh()
    End Sub
    Private Sub btnGraphSuiv_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGraphSuiv.Click
        If numPage < 3 Then
            numPage = numPage + 1
        End If
        refreshGraphiques_1(_universBDD.listeTraitements.getTraitMoteurMethode2.scenarioCentral)
        Refresh()
    End Sub

    Private Sub affichePage(ByVal master As ZedGraph.MasterPane, ByVal scenCentMoteur2 As scenarioCentralMoteur2)
        Select Case numPage
            Case 1
                master.Title.Text = "Synthèse des résultats de la garantie décès"
                Dim GPaneROE_1DC As ZedGraph.GraphPane = getGPaneROE_1(scenCentMoteur2)
                Dim GPaneNbCotisantsDC As ZedGraph.GraphPane = getGPaneNbCotisantsDC(scenCentMoteur2)
                Dim GPaneNbSinDC As ZedGraph.GraphPane = getGPaneNbSinDC(scenCentMoteur2)
                Dim GPaneProvisionsDC As ZedGraph.GraphPane = getGPaneProvisionsDC(scenCentMoteur2)
                Dim GPaneSPDC As ZedGraph.GraphPane = getGPaneSPDC(scenCentMoteur2)
                'Ajout de tous les graphiques dans le conteneur
                master.Add(GPaneROE_1DC)
                master.Add(GPaneNbCotisantsDC)
                master.Add(GPaneNbSinDC)
                master.Add(GPaneProvisionsDC)
                master.Add(GPaneSPDC)
            Case 2
                master.Title.Text = "Synthèse des résultats de la garantie INCAP/INVAL"
                Dim GPaneROE_1 As ZedGraph.GraphPane = getGPaneROE_1(scenCentMoteur2)
                Dim GPaneNbCotisants As ZedGraph.GraphPane = getGPaneNbCotisantsINCINV(scenCentMoteur2)
                Dim GPaneNbSinINCINV As ZedGraph.GraphPane = getGPaneNbSinINCINV(scenCentMoteur2)
                Dim GPaneProvisionsINCINV As ZedGraph.GraphPane = getGPaneProvisionsINCINV(scenCentMoteur2)
                Dim GPaneSPINCINV As ZedGraph.GraphPane = getGPaneSPINCINV(scenCentMoteur2)
                'Ajout de tous les graphiques dans le conteneur
                master.Add(GPaneROE_1)
                master.Add(GPaneNbCotisants)
                master.Add(GPaneNbSinINCINV)
                master.Add(GPaneProvisionsINCINV)
                master.Add(GPaneSPINCINV)
            Case 3
                master.Title.Text = "Synthèse des résultats toutes garanties confondues"
                Dim GPaneROE_1 As ZedGraph.GraphPane = getGPaneROE_1(scenCentMoteur2)
                Dim GPaneNbCotisants As ZedGraph.GraphPane = getGPaneNbCotisantsTOT(scenCentMoteur2)
                Dim GPaneNbSin As ZedGraph.GraphPane = getGPaneNbSinTOT(scenCentMoteur2)
                Dim GPaneProvisions As ZedGraph.GraphPane = getGPaneProvisionsTOT(scenCentMoteur2)
                Dim GPaneSP As ZedGraph.GraphPane = getGPaneSPTOT(scenCentMoteur2)
                'Ajout de tous les graphiques dans le conteneur
                master.Add(GPaneROE_1)
                master.Add(GPaneNbCotisants)
                master.Add(GPaneNbSin)
                master.Add(GPaneProvisions)
                master.Add(GPaneSP)
        End Select
    End Sub
#End Region

End Class